<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>

</head>
<body>
<script src="adata.js"></script>
<script type="text/javascript">
  let param = {
    mb_h: [],
    mb_l: [],
    jy_h: [],
    jy_l: [],
    max: 2933.8,
    xData: new Array(1201).fill(''),
    mb: [],
    _mb: [],
    jy: [],
    _jy: [],
    currentIndex: 0,
    size: 0,
    intervalFlag: false,
    peak:[],
    _peak:[],
    title:""
  }

  adata[1].slice(40, 1240).forEach(([jy_l, jy_h, mb_l, mb_h]) => {
    let mb_v=int16Overflow(mb_l + 256 * mb_h) / 10
    let jy_v=int16Overflow(jy_l + 256 * jy_h) * 10
    param.mb.push(mb_v)
    param._mb.push(-mb_v)
    param.jy.push(jy_v)
    param._jy.push(-jy_v)

  })

  param.peak=findPeaks(param.mb, 100, 200.0, param.max)
  param._peak=findPeaks(param._mb, 100, 200.0, param.max)

  console.log(param)
  // let result=`脉率： ${60*1000/(param.peak[1]-param.peak[0])/5} 波长：${(param.peak[1]-param.peak[0])*5} ms 波幅 ${}`
  let text = `mailv ${Math.floor(60 * 1000 / (param.peak[1] - param.peak[0]) / 5)}  bochang: ${(param.peak[1] - param.peak[0]) * 5} ms bofu ${Math.floor(param.mb[param.peak[0]] - param.mb[param._peak[0]])}`;

  console.log(text)
  function int16Overflow(num) {
    let result = num & 0xFFFF // 使用按位与运算符将数字限制在16位范围内
    if (result > 32767) { // 如果结果大于32767（int16的最大值）
      result -= 65536 // 减去65536以实现溢出
    } else if (result < -32768) { // 如果结果小于-32768（int16的最小值）
      result += 65536 // 加上65536以实现溢出
    }
    return result
  }

  function findPeaks(y, distance, heightMin, heightMax) {
    let peaks = []
    let prevPeak = null

    for (let i = 0; i < y.length - 1; i++) {
      // 检查是否在当前点左侧是递减的，右侧是递增的（即峰值）
      if (y[i] > y[i + 1] && y[i] > y[i - 1]) {
        // 检查高度条件
        if (heightMin === undefined || y[i] >= heightMin) {
          if (heightMax === undefined || y[i] <= heightMax) {
            // 检查距离条件
            if (prevPeak === null || i - prevPeak > distance) {
              peaks.push(i)
              prevPeak = i
            }
          }
        }
      }
    }

    // 检查数组的最后一个元素是否为峰值（仅当它比前一个元素大时）
    if (y.length > 1 && y[y.length - 1] > y[y.length - 2]) {
      if (prevPeak === null || y.length - 1 - prevPeak > distance) {
        peaks.push(y.length - 1)
      }
    }

    return peaks
  }

  // 示例数据
  /* let y1 = [100, 110, 120, 110, 100, 220, 210, 200, 190, 100, 330, 320, 310, 300]
  let distance = 100
  let heightMin = 200.0
  // 假设 _maibo_hi 是一个变量，这里我们将其设置为一个具体值
  let heightMax = 350.0 // 假设值

  let peaks = findPeaks(y1, distance, heightMin, heightMax)
  console.log(peaks) // 输出峰值索引*/
</script>
</body>
</html>
